module case_stmt();

byte a = 0;

initial begin
    repeat (7) begin
        #1 a += 1;
    end
    $finish;
end

// unique case要求只有一个case项匹配，否则会产生编译警告或仿真错误
always_comb begin
    unique case (a)
        0, 1: $display("unique case 0 or 1");
        2: $display("unique case 2");
        3: $display("unique case 3");
        default: $display("unique case default");
    endcase
end

// priority case明确表明case项有优先级，按照从上到下的顺序匹配
// casez 用于处理"不关心"位（用?或z表示）的匹配
// casex 把x和z都视为"不关心"位，casex 在实际设计中使用较少
always_comb begin
    priority casez (a)
        3'b00?: $display("priority casez 0 or 1");
        3'b0??: $display("priority casez 2 or 3");
        default: $display("priority casez default");
    endcase
end

always_comb begin
    unique case (a) inside
        [0:3]: $display("unique case inside 0 to 3");
        [4:7]: $display("unique case inside 4 to 7");
        default: $display("unique case inside default");
    endcase
end

endmodule
